package ar.com.cubika.trainees.bean.transportes.actividades;

import java.util.Date;

import ar.com.cubika.trainees.bean.transportes.vehiculos.Vehiculo;
import ar.com.cubika.trainees.date.RangoDeFechas;

/**
 * Representa una entrada en mantenimiento de un vehiculo.
 * @see ar.com.cubika.trainees.bean.transportes.vehiculos.Vehiculo
 * @author clombardi
 */
public class Mantenimiento implements Actividad {
	private Vehiculo vehiculo;
	private RangoDeFechas periodo;
	private String razon;
	
	/**
	 * Constructor comodo
	 * @param vehiculo el vehiculo que entra en mantenimiento
	 * @param fechaInicio primer dia en mantenimiento
	 * @param fechaFin ultimo dia en mantenimiento
	 */
	public Mantenimiento(Vehiculo vehiculo, RangoDeFechas periodo) {
		this();
		this.vehiculo = vehiculo;
		this.periodo = periodo;
		//RangoDeFechaDAO rangoDao  = RangoDeFechaDAO.getInstance();	//Pasar esta responsabilidad al controller de Mantenimiento
		//rangoDao.insertRango(this.periodo);
	}

	/**
	 * Para Hibernate
	 */
	public Mantenimiento() {
	}

	
	/* (non-Javadoc)
	 * @see ar.com.cubika.trainees.bean.transportes.actividades.Actividad#incluyeFecha(java.util.Date)
	 */
	public boolean incluyeFecha(Date fecha) {
		return this.periodo.incluye(fecha);
	}
	
	/* (non-Javadoc)
	 * @see ar.com.cubika.trainees.bean.transportes.actividades.Actividad#getDescripcion()
	 */
	public String getDescripcion() {
		return "Mantenimiento por: " + this.getRazon();
	}

	/**
	 * El periodo afectado por el mantenimiento.
	 */
	public RangoDeFechas getPeriodo() {
		return periodo;
	}
	
	/**
	 * La fecha en la que el vehiculo entra en mantenimiento.
	 */
	public Date getFechaInicio() {
		return this.periodo.getFechaInicio();
	}

	/**
	 * El ultimo dia en el que el vehiculo esta en mantenimiento.
	 */
	public Date getFechaFin() {
		return this.periodo.getFechaFin();
	}

	/**
	 * La razon por la que el vehiculo entro en mantenimiento.
	 * @return un String descriptivo
	 */
	public String getRazon() {
		return razon;
	}

	/**
	 * El Vehiculo al que se refiere el mantenimiento
	 */
	public Vehiculo getVehiculo() {
		return vehiculo;
	}

	/* (non-Javadoc)
	 * @see java.lang.Object#toString()
	 */
	public String toString() {
		return this.getDescripcion();
	}
	

	public void setRazon(String razon) {
		this.razon = razon;
	}

	
}
